home *** CD-ROM | disk | FTP | other *** search
- { I'm sorry that my reply Sounded rude, it wasn't meant as such. Probably
- the best way to make a screen saver TSR is to latch onto inT $8, which is
- called once a second to update the clock, using GetIntVec and SetIntVec.
- Since your other TSR code is probably a normal Procedure For whatever other
- interrupts you are using, just put the screen blanker Procedure inside the
- other Procedure, and hopefully when you use Keep Dos will retain both your
- normal TSR code and the screen saver code.
- }
- {$M 4096,0,0}
- {$N-,S-}
- Program TSRplusSaver;
- Uses Dos;
-
- Procedure MyTSR (Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP : Word);
- inTERRUPT;
- Const Maximum = 120; {2 minutes}
- Var Elapsed : Word;
- Var Saving : Boolean;
-
- Procedure ResetSvr (Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP : Word);
- Interrupt;
- begin
- if Saving then begin
- Saving := False;
- Port[984] := 41; {Enable 6845 video}
- end;
- Elapsed := 0;
- end;
-
- Procedure MyScreenSaver (Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP : Word);
- Interrupt;
- begin
- Inc (Elapsed);
- if Elapsed=Maximum then
- Port[984] := 33; {Disable 6845 video}
- Saving := True;
- end;
- end;
-
- begin {MyTSR}
- MemW[$b800:$0000] := 3585; {Happy face}
- end;
-
- begin
- SetIntVec( $09, @ResetSvr); {Reset screen saver on Keypress}
- SetIntVec( $08, @MyScreenSaver); {Increment elapsed every second,
- activate when ready}
- SetIntVec( $1C, @MyTSR); {Set up your TSR code}
- Keep(0);
- end.
-
- { I'm pretty sure something like this will work, but I haven't tried it
- myself yet. of course you'll have to add CLI instructions at the
- beginning of each of the interrupt Procedure and a restore interrupts after
- it, so nothing can occur during them except NMI. You may have some trouble
- there, since on the PCjr the NMI includes keyboard input (pretty stupid,
- huh?)
- }